#include<cstdio>
#include<algorithm>
#include<cmath>
#include<map>
#define N 99824353
#define int unsigned long long
using namespace std;
int n;
char Opt[50];
char ad[100];
short Cnt[N/100];
struct Node{
	int a[6],val;
};
Node hsh[N/100][20];
int mul(int a,int b){
	return (1ll*a*b)%N;
}
int add(int a,int b){
	return (a+b)%N;
}
int gethsh(Node x){
	return add(add(mul(add(mul(add(mul(x.a[1],255),x.a[2]),255),x.a[3]),255),x.a[4]),x.a[5])/100;
}
bool P(Node x,Node y){
	if(x.a[1]==y.a[1]&&x.a[2]==y.a[2]&&x.a[3]==y.a[3]&&x.a[4]==y.a[4]&&x.a[5]==y.a[5]){return true;}
	
	else return false;
}
int check(int x,Node a){
	for(int i=0;i<Cnt[x];i++){
		if(P(hsh[x][i],a)) return hsh[x][i].val;
	}
	return 0;
}
signed main(){
	freopen("network.in","r",stdin);
	freopen("network.out","w",stdout);
	scanf("%lld",&n);
	for(int i=1;i<=n;i++){
		scanf("%s",Opt);
		if(Opt[0]=='S'){
			int s=1;
			int ans[35],cnt=1,res=0;
			bool flag=false,flags=true,fl=true;
			bool mao=false;
			int point=0,maos=0;
			int num=0;
			char ch=getchar();
			while(ch!='\n'){
				if(ch==' '){ch=getchar();continue;}
				ad[s]=ch;
				if(ch=='.'){
					if(res==0&&flags&&!num){
						fl=false;
					}
					point++;
					if(!mao){
						if(res>=0&&res<=255){ans[cnt++]=res;}
						else{fl=false;}
					}
					else{
						if(res>=0&&res<=65535){ans[cnt++]=res;}
						else{fl=false;}
					}
					flag=true;
					flags=true;
					res=0;
					num=0;
				}
				else if(ch==':'){
					if(res==0&&flags&&!num){
						fl=false;
					}
					maos++;
					if(point!=3){fl=false;}
					if(!mao){
						if(res>=0&&res<=255){ans[cnt++]=res;}
						else{fl=false;}
					}
					else{
						if(res>=0&&res<=65535){ans[cnt++]=res;
						}
						else{fl=false;}
					}
					mao=true;
					flag=true;
					flags=true;
					res=0;
					num=0;
				}
				else{
					if(!flags){fl=false;}
					if(point==0&&maos==0&&ch=='0'&&s==1) num=1,flags=false;
					if(flag){if(ch=='0'){flags=false;}flag=false;}
					res=res*10+ch-'0';
				}
				s++;ch=getchar();
			}
			if(!mao){
				if(res>=0&&res<=255){ans[cnt++]=res;}
				else{fl=false;}
			}
			else{
				if(res>=0&&res<=65535){ans[cnt++]=res;}
				else{fl=false;}
			}
			res=0;
			if(point!=3||maos!=1){fl=false;}
			if(!fl) {
				printf("ERR\n");
			}
			else{
				Node x;
				x.a[1]=ans[1],x.a[2]=ans[2],x.a[3]=ans[3],x.a[4]=ans[4],x.a[5]=ans[5];
				if(check(gethsh(x),x)){
					printf("FAIL\n");
				}
				else{
					hsh[gethsh(x)][Cnt[gethsh(x)]].val=i;
					for(int j=1;j<=5;j++) hsh[gethsh(x)][Cnt[gethsh(x)]].a[j]=x.a[j];
					Cnt[gethsh(x)]++;
					printf("OK\n");
				}
			}
		}
		else{
			int s=1;
			int ans[35],cnt=1,res=0;
			bool flag=false,flags=true,fl=true;
			bool mao=false;
			int point=0,maos=0;
			int num=0;
			char ch=getchar();
			while(ch!='\n'){
				if(ch==' '){ch=getchar();continue;}
				ad[s]=ch;
				if(ch=='.'){
					if(res==0&&flags&&!num){
						fl=false;
					}
					point++;
					if(!mao){
						if(res>=0&&res<=255){ans[cnt++]=res;}
						else{fl=false;}
					}
					else{
						if(res>=0&&res<=65535){ans[cnt++]=res;}
						else{fl=false;}
					}
					flag=true;
					flags=true;
					res=0;
					num=0;
				}
				else if(ch==':'){
					if(res==0&&flags&&!num){
						fl=false;
					}
					maos++;
					if(point!=3){fl=false;}
					if(!mao){
						if(res>=0&&res<=255){ans[cnt++]=res;}
						else{fl=false;}
					}
					else{
						if(res>=0&&res<=65535){ans[cnt++]=res;
						}
						else{fl=false;}
					}
					mao=true;
					flag=true;
					flags=true;
					res=0;
					num=0;
				}
				else{
					if(!flags){fl=false;}
					if(point==0&&maos==0&&ch=='0'&&s==1) num=1,flags=false;
					if(flag){if(ch=='0'){flags=false;}flag=false;}
					res=res*10+ch-'0';
				}
				s++;ch=getchar();
			}
			if(!mao){
				if(res>=0&&res<=255){ans[cnt++]=res;}
				else{fl=false;}
			}
			else{
				if(res>=0&&res<=65535){ans[cnt++]=res;}
				else{fl=false;}
			}
			res=0;
			if(point!=3||maos!=1){fl=false;}
			if(!fl) printf("ERR\n");
			else{
				Node x;
				x.a[1]=ans[1],x.a[2]=ans[2],x.a[3]=ans[3],x.a[4]=ans[4],x.a[5]=ans[5];
				int y=check(gethsh(x),x);
				if(y){
					printf("%lld\n",y);
				}
				else{
					printf("FAIL\n");
				}
			}
		}
	}
	return 0;
}
/*
5
Server 192.168.1.1:8080
Server 192.168.1.1:8080
Client 192.168.1.1:8080
Client 192.168.1.1:80
Client 192.168.1.1:99999


10
Server 192.168.1.1:80
Client 192.168.1.1:80
Client 192.168.1.1:8080
Server 192.168.1.1:80
Server 192.168.1.1:8080
Server 192.168.1.999:0
Client 192.168.1.1.8080
Client 192.168.1.1:8080
Client 192.168.1.1:80
Client 192.168.1.999:0
*/
